package com.bjsxt.service.impl;

import javax.annotation.Resource;
import java.util.List;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bjsxt.constants.Constants;
import com.bjsxt.domain.Patient;
import com.bjsxt.domain.PatientFile;
import com.bjsxt.dto.PatientDto;
import com.bjsxt.mapper.PatientFileMapper;
import com.bjsxt.mapper.PatientMapper;
import com.bjsxt.service.PatientService;
import com.bjsxt.utils.AppMd5Utils;
import com.bjsxt.vo.DataGridView;
import org.apache.commons.lang3.StringUtils;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import sun.security.krb5.internal.PAData;

@Service
public class PatientServiceImpl implements PatientService{

    @Autowired
    private PatientMapper patientMapper;

    @Autowired
    private PatientFileMapper patientFileMapper;


    /**
     * 分页查询所有患者信息
     * @param patientDto
     * @return
     */
    @Override
    public DataGridView listPatientForPage(PatientDto patientDto) {
        Page<Patient> page = new Page<>(patientDto.getPageNum(),patientDto.getPageSize());
        QueryWrapper<Patient> qw = new QueryWrapper<>();
        // 根据患者姓名模糊查询
        qw.like(StringUtils.isNotBlank(patientDto.getName()),Patient.COL_NAME,patientDto.getName());
        // 根据患者手机号模糊查询
        qw.like(StringUtils.isNotBlank(patientDto.getPhone()),Patient.COL_PHONE,patientDto.getPhone());
        // 根据患者身份证号模糊查询
        qw.like(StringUtils.isNotBlank(patientDto.getIdCard()),Patient.COL_ID_CARD,patientDto.getIdCard());
        this.patientMapper.selectPage(page,qw);
        return new DataGridView(page.getTotal(), page.getRecords());
    }

    /**
     * 根据患者id查询患者信息
     * @param patientId
     * @return
     */
    @Override
    public Patient getPatientById(String patientId) {
        Patient patient = this.patientMapper.selectById(patientId);
        return patient;
    }


    /**
     * 根据患者id查询患者档案信息
     * @param patientId
     * @return
     */
    @Override
    public PatientFile getPatientFileById(String patientId) {
        if (null==patientId){
            return null;
        }
        QueryWrapper<PatientFile> qw = new QueryWrapper<>();
        qw.eq(StringUtils.isNotBlank(patientId),PatientFile.COL_PATIENT_ID,patientId);
        return patientFileMapper.selectOne(qw);
    }

    /**
     * 根据患者身份证号查询患者信息
     * @param idCard
     * @return
     */
    @Override
    public Patient getPatientByIdCard(String idCard) {
        QueryWrapper<Patient> qw = new QueryWrapper<>();
        qw.eq(StringUtils.isNotBlank(idCard),Patient.COL_ID_CARD,idCard);
        return patientMapper.selectOne(qw);
    }

    /**
     * 添加患者信息到患者库中
     * @param patientDto
     */
    @Override
    public Patient addPatient(PatientDto patientDto) {
        Patient patient = new Patient();
        // 复制属性
        BeanUtil.copyProperties(patientDto,patient);
        // 设置创建时间
        patient.setCreateTime(DateUtil.date());
        // 设置是否完善信息 因为此处只是插入患者的基本信息 患者的详细信息还未插入 所以
        // 此处应设置患者信息状态为未完善
        patient.setIsFinal(Constants.IS_FINAL_FALSE);
        // 设置默认密码 截取手机号后6位进行加密 并散列两次 盐为电话号
        String defaultPwd = patient.getPhone().substring(5);
        patient.setPassword(AppMd5Utils.md5(defaultPwd,patient.getPhone(),2));
        this.patientMapper.insert(patient);
        return patient;
    }
}
